﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DAL.Interfejsi;
using source;
using MySql.Data.MySqlClient;

namespace DAL
{
    partial class DAL
    {
        public class UcenikDAO : IDaoCrud<Ucenik>
        {
            #region IDaoCrud<Ucenik> Members
            protected MySqlCommand c;
            public long create(Ucenik entity)
            {
                try
                {
                    c = new MySqlCommand("insert into ucenik (korisnik_id, ime_oca, ime_majke, dodatne_napomene) values (@KorisnikID, @Otac, @Majka, @Napomene);", con);
                    c.Parameters.AddWithValue("@KorisnikID", entity.ID);
                    c.Parameters.AddWithValue("@Otac", entity.Otac);
                    c.Parameters.AddWithValue("@Majka", entity.Majka);
                    c.Parameters.AddWithValue("@Napomene", entity.OpisPsiholoskogProfila);
                    c.ExecuteNonQuery();
                    return entity.ID;
                }
                catch (Exception e)
                {
                    throw e;
                }
            }

            public List<Ucenik> getAll()
            {
                try
                {
                    c = new MySqlCommand("select * from korisnik, ucenik where korisnik_id = id;", con);
                    MySqlDataReader r = c.ExecuteReader();
                    List<Ucenik> ucenici = new List<Ucenik>();
                    while (r.Read())
                    {
                        Ucenik ucenik = new Ucenik();
                        ucenik.ID = r.GetInt32("id");
                        ucenik.Username = r.GetString("username");
                        ucenik.Password = r.GetString("password");
                        ucenik.Tip = r.GetString("tip");
                        ucenik.Ime = r.GetString("ime");
                        ucenik.Prezime = r.GetString("prezime");
                        ucenik.JMBG = r.GetString("jmbg");
                        ucenik.DatumRodjenja = r.GetDateTime("datum_rodjenja");
                        ucenik.Adresa = r.GetString("adresa");
                        ucenik.Telefon = r.GetString("telefon");
                        ucenik.Email = r.GetString("email");
                        ucenik.Drzavljanstvo = r.GetString("drzavljanstvo");
                        ucenik.Slika = r.GetString("slika");
                        ucenik.Otac = r.GetString("ime_oca");
                        ucenik.Majka = r.GetString("ime_majke");
                        ucenik.OpisPsiholoskogProfila = r.GetString("dodatne_napomene");
                        ucenici.Add(ucenik);
                    }
                    r.Close();
                    c.Dispose();
                    return ucenici;
                }
                catch (Exception e)
                {
                    throw e;
                }
            }

            public Ucenik read(Ucenik entity)
            {
                try
                {
                    c = new MySqlCommand("select * from korisnik, ucenik where id = @ID; and korisnik_id = @ID;", con);
                    c.Parameters.AddWithValue("@ID", entity.ID);
                    MySqlDataReader r = c.ExecuteReader();
                    Ucenik ucenik = new Ucenik();
                    if (r.Read())
                    {
                        ucenik.ID = r.GetInt32("id");
                        ucenik.Username = r.GetString("username");
                        ucenik.Password = r.GetString("password");
                        ucenik.Tip = r.GetString("tip");
                        ucenik.Ime = r.GetString("ime");
                        ucenik.Prezime = r.GetString("prezime");
                        ucenik.JMBG = r.GetString("jmbg");
                        ucenik.DatumRodjenja = r.GetDateTime("datum_rodjenja");
                        ucenik.Adresa = r.GetString("adresa");
                        ucenik.Telefon = r.GetString("telefon");
                        ucenik.Email = r.GetString("email");
                        ucenik.Drzavljanstvo = r.GetString("drzavljanstvo");
                        ucenik.Slika = r.GetString("slika");
                        ucenik.Otac = r.GetString("ime_oca");
                        ucenik.Majka = r.GetString("ime_majke");
                        ucenik.OpisPsiholoskogProfila = r.GetString("dodatne_napomene");
                        
                    }
                    r.Close();
                    c.Dispose();
                    return ucenik;
                }
                catch (Exception e)
                {
                    throw e;
                }
            }

            public Ucenik update(Ucenik entity)
            {
                try
                {
                    c = new MySqlCommand("UPDATE ucenik SET ime_oca = @Otac, ime_majke = @Majka, dodatne_napomene = @Napomene where korisnik_id = @KorisnikID;", con);
                    c.Parameters.AddWithValue("@KorisnikID", entity.ID);
                    c.Parameters.AddWithValue("@Otac", entity.Otac);
                    c.Parameters.AddWithValue("@Majka", entity.Majka);
                    c.Parameters.AddWithValue("@Napomene", entity.OpisPsiholoskogProfila);
                    c.ExecuteNonQuery();
                    return entity;
                }
                catch (Exception e)
                {
                    throw e;
                }
            }

            public void delete(Ucenik entity)
            {
                try
                {
                    c = new MySqlCommand("delete from ucenik where korisnik_id = @KorisnikID;", con);
                    c.Parameters.AddWithValue("@KorisnikID", entity.ID);
                    c.ExecuteNonQuery();
                }
                catch (Exception e)
                {
                    throw e;
                }
            }

            public Ucenik getById(int id)
            {
                try
                {
                    c = new MySqlCommand("select * from korisnik, ucenik where id = @ID and korisnik_id = id;", con);
                    c.Parameters.AddWithValue("@ID", id);
                    MySqlDataReader r = c.ExecuteReader();
                    Ucenik ucenik = new Ucenik();
                    if (r.Read())
                    {
                        ucenik.ID = r.GetInt32("id");
                        ucenik.Username = r.GetString("username");
                        ucenik.Password = r.GetString("password");
                        ucenik.Tip = r.GetString("tip");
                        ucenik.Ime = r.GetString("ime");
                        ucenik.Prezime = r.GetString("prezime");
                        ucenik.JMBG = r.GetString("jmbg");
                        ucenik.DatumRodjenja = r.GetDateTime("datum_rodjenja");
                        ucenik.Adresa = r.GetString("adresa");
                        ucenik.Telefon = r.GetString("telefon");
                        ucenik.Email = r.GetString("email");
                        ucenik.Drzavljanstvo = r.GetString("drzavljanstvo");
                        ucenik.Slika = r.GetString("slika");
                        ucenik.Otac = r.GetString("ime_oca");
                        ucenik.Majka = r.GetString("ime_majke");
                        ucenik.OpisPsiholoskogProfila = r.GetString("dodatne_napomene");
                    }
                    r.Close();
                    c.Dispose();
                    return ucenik;
                }
                catch (Exception e)
                {
                    throw e;
                }
            }

            public List<Ucenik> getByExample(string name, string value)
            {
                try
                {
                    c = new MySqlCommand("select * from korisnik, ucenik where @Kolona = @Vrijednost and korisnik_id = id;", con);
                    c.Parameters.AddWithValue("@Kolona", name);
                    c.Parameters.AddWithValue("@Vrijednost", value);
                    MySqlDataReader r = c.ExecuteReader();
                    List<Ucenik> uceniki = new List<Ucenik>();
                    while (r.Read())
                    {
                        Ucenik ucenik = new Ucenik();
                        ucenik.ID = r.GetInt32("id");
                        ucenik.Username = r.GetString("username");
                        ucenik.Password = r.GetString("password");
                        ucenik.Tip = r.GetString("tip");
                        ucenik.Ime = r.GetString("ime");
                        ucenik.Prezime = r.GetString("prezime");
                        ucenik.JMBG = r.GetString("jmbg");
                        ucenik.DatumRodjenja = r.GetDateTime("datum_rodjenja");
                        ucenik.Adresa = r.GetString("adresa");
                        ucenik.Telefon = r.GetString("telefon");
                        ucenik.Email = r.GetString("email");
                        ucenik.Drzavljanstvo = r.GetString("drzavljanstvo");
                        ucenik.Slika = r.GetString("slika");
                        ucenik.Otac = r.GetString("ime_oca");
                        ucenik.Majka = r.GetString("ime_majke");
                        ucenik.OpisPsiholoskogProfila = r.GetString("dodatne_napomene");
                        uceniki.Add(ucenik);
                    }
                    r.Dispose();
                    r.Close();
                    c.Dispose();
                    return uceniki;
                }
                catch (Exception e)
                {
                    throw e;
                }
            }
            #endregion
        }
    }
}
